﻿using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows.Input;
using System.Collections.Generic;
using ScrumFactory.Composition.ViewModel;
using ScrumFactory.Composition;



namespace ScrumFactory.Composition.ViewModel {

    public enum BacklogStatusFilter : short {
        TODO_BACKLOG,
        PLANNING_BACKLOG,
        SELECTED_BACKLOG,
        ALL_BACKLOG
    }

    /// <summary>
    /// Backlog View Model interface.
    /// </summary>
    public interface IBacklogViewModel {

        /// <summary>
        /// Gets the project.
        /// </summary>
        /// <value>The project.</value>
        Project Project { get; }

        /// <summary>
        /// Gets the backlog items.
        /// </summary>
        /// <value>The collection of View Model of each item.</value>
        ObservableCollection<IBacklogItemDetailViewModel> Items { get; }

        /// <summary>
        /// Gets the filtered backlog.
        /// </summary>
        /// <value>The filtered backlog.</value>
        ICollectionView FilteredBacklog { get; }

        /// <summary>
        /// Gets the new name of the item to be created.
        /// </summary>
        /// <value>The new name of the item.</value>
        string NewItemName { get; }

        /// <summary>
        /// Gets the create new backlog item command.
        /// </summary>
        /// <value>The create new backlog item command.</value>
        ICommand CreateNewBacklogItemCommand { get; }

        /// <summary>
        /// Gets the delete backlog item command.
        /// </summary>
        /// <value>The delete backlog item command.</value>
        DelegateCommand<IBacklogItemDetailViewModel> DeleteBacklogItemCommand { get; }

        /// <summary>
        /// Gets or sets the status filter.
        /// </summary>
        /// <value>The status filter.</value>
        BacklogStatusFilter StatusFilter { get; set; }

        /// <summary>
        /// Gets or sets the view.
        /// </summary>
        /// <value>The view.</value>
        //IBacklogView View { get; set; }

        /// <summary>
        /// Gets the item detail view.
        /// </summary>
        /// <value>The item detail view.</value>
        //IBacklogItemDetailView ItemDetailView { get; }


    }
}
